package gbm

import "encoding/json"

// StrToJson 将字符串转换为 JSON 对象
// 参数:
//
//	str: 需要转换的字符串
//
// 返回:
//
//	result: 转换后的 JSON 对象
//	err: 如果转换过程中出现错误，返回具体的错误信息
func StrToJson(str string) (result map[string]interface{}, err error) {
	// 判断源数据是否为空，如果为空，则直接返回空字符串。
	if str == "" {
		return nil, nil
	}
	var jsonResult map[string]interface{}
	if err := json.Unmarshal([]byte(str), &jsonResult); err != nil {
		return nil, err
	}
	return jsonResult, nil
}

// JsonToStr 将一个map[string]interface{}类型的JSON数据转换为字符串表示形式。
// 这个函数接收一个map[string]interface{}类型的变量作为输入参数，
// 其中key是字符串类型的属性名，value是属性值，可以是任意类型。
// 函数返回两个值：一个是转换后的字符串，另一个是可能发生的错误。
// 如果转换过程中没有发生错误，err将为nil。
func JsonToStr(data map[string]interface{}) (string, error) {
	// 判断源数据是否为空，如果为空，则直接返回空字符串。
	if data == nil {
		return "", nil
	}
	// 使用json.Marshal函数将map[string]interface{}类型的变量转换为JSON格式的字节切片。
	// 这里没有对data参数进行直接操作，而是创建了一个空的map[string]interface{}作为参数传递给json.Marshal，
	// 这可能是一个错误，因为它将导致函数总是返回一个空JSON对象的字符串表示，而不是data的内容。
	jsonBytes, err := json.Marshal(data)

	// 将转换后的字节切片转换为字符串类型，以便于后续的处理或显示。
	// 这一步是必要的，因为函数的返回值之一是字符串类型。
	jsonStr := string(jsonBytes)

	// 返回转换后的JSON字符串和可能的错误。
	// 如果转换过程中发生了错误，err将包含错误信息，否则将为nil。
	return jsonStr, err
}
